package ch4oopexer1;

import java.util.Scanner;

/*3：重写之前公司的案例
 公司有公司名称，注册地址，电话，经营范围等属性，公司有很多员工（暂用数组表示），
 员工有姓名，年龄，性别，职务，薪水等属性，
 公司有招聘员工，有输出员工信息，以及辞退员工，和统计公司人数的方法
用oo的思想模拟，相关类用构造方法初始化。*/
public class CompanyTest {
    /*this关键字的使用：
     * 1.this可以用来修饰、调用：属性、方法、构造器
     *
     * 2.this修饰属性和方法：
     * 	 this理解为：当前对象  或  当前正在创建的对象（对于构造器而言的）
     *
     * 	2.1	在类的方法中，我们可以使用"this.属性"或"this.方法"的方式，调用当前属性或方法。但是
     * 通常情况下，我们都选择省略“this.”。特殊情况下，如果方法的形参和类同名时，我们必须显式的使用
     * "this.变量"的方式，表明变量是属性，而非形参。
     *
     *  2.2 在类的构造器中，我们可以使用"this.属性"或"this.方法"的方式，调用当前正在创建的对象属性
     *或方法。但是，通常过情况下，我们都选择省略“this.”。特殊情况下，如果构造器的形参和类的属性同名时，我们必须
     *显式的使用"this.变量"的方式，来表明此变量是属性。而非形参
     *
     *3.this调用构造器（此种方法有效的减少了冗余）
     *		①我们在类的构造器中，可以显式的使用"this(形参列表)"方式，本类中指定的其他构造器
     *		②构造其中不能通过"this(形参列表)"方式调用自己
     *		③如果一个类中有n个构造器，则最多有 n - 1构造器使用了"this(形参列表)"
     *		④规定:"this(形参列表)"必须声明在当前构造器的首行
     *		⑤构造其内部，最多只能声明一个"this(形参列表)"，用来调用其他的构造器
     * 注意：不管如何调用构造器，自始至终只是造了一个对象。*/
     public static void main(String[] args) {
         Scanner scan = new Scanner(System.in);

         Company company = new Company("万达","合肥","13245698745",
                 "凤巢园");

         while(true){
             System.out.println("1.招聘员工");
             System.out.println("2.辞退员工");
             System.out.println("3.输出公司信息以及员工信息");
             System.out.println("4.统计公司员工总人数");
             System.out.println("5.查找公司中薪水最高的人的信息");
             System.out.println("6.根据薪资的高低排序显示");
             System.out.println("7.退出");
             System.out.println("请输入如选项（1~6）：");

             int chooice=0;
             while(true){
             chooice= scan.nextInt();
             if(chooice<0||chooice>7){
                 System.out.println("输入错误，重新输入！");
             }else{
                 break;
             }
         }
             switch(chooice){
                 case 1://员工有姓名，年龄，性别，职务，薪水
                     //Staff staff = new Staff();
                     System.out.println("****招聘员工*****");
                     System.out.print("请输入员工姓名：");
                     String sName  = scan.next();
                     System.out.print("请输入员工年龄：");
                     int sAge = scan.nextInt();
                     System.out.print("请输入员工性别：");
                     String sGendger = scan.next();
                     System.out.print("请输入员工职务：");
                     String sDuty = scan.next();
                     System.out.print("请输入员工薪水：");
                     double sSalary = scan.nextDouble();
                     Staff staff = new Staff(sName,sAge,sGendger,sDuty,sSalary);

                     boolean add1=company.add(staff);
                     System.out.println( add1?"招聘员工成功":"招聘不成功");

                     break;
                 case 2:
                     System.out.println("****辞退员工*****");
                     System.out.print("请输入要辞退员工的名字：");
                     String dissName = scan.next();
                     company.dismiss(dissName);
                     break;
                 case 3:
                     System.out.println("****显示信息*****");
                     company.show();
                     break;
                 case 4:
                     System.out.println("****显示公司总人数*****");
                     System.out.println("公司总人数为："+company.getNum());
                     break;
                 case 5:
                     System.out.println("公司中薪水最高的人为："+company.findTopSalary().staffName);
                     break;

                 case 6:
                     System.out.println("***********************根据薪资的高低排序显示*****************");
                     company.sortBySalDesc();
                     break;

                 case 7:
                     System.out.println("是否退出(Y/N)");
                     String isExit=scan.next();
                     if(isExit.equals("Y")){
                         return;
                     }
                     break;
             }
         }
     }
}
